package com.hz;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 4. 请求的转发和重定向:
 *
 * 1). 本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求.
 *
 * 具体:
 *
 * ①. 请求的转发: 地址栏是初次发出请求的地址.
 *        请求的重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址
 *
 * ②. 请求转发: 在最终的 Servlet 中, request 对象和中转的那个 request 是同一个对象.
 *        请求的重定向: 在最终的 Servlet 中, request 对象和中转的那个 request 不是同一个对象.
 *
 * ③. 请求的转发: 只能转发给当前 WEB 应用的的资源
 *        请求的重定向: 可以重定向到任何资源.
 *
 * ④. 请求的转发: / 代表的是当前 WEB 应用的根目录
 *        请求的重定向: / 代表的是当前 WEB 站点的根目录.
 */
public class ForwardServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("ForwardServlet's doGet");

		request.setAttribute("name", "abcde");
		System.out.println("ForwardServlet's name: " + request.getAttribute("name"));

		//请求的转发.
		//1. 调用 HttpServletRequest 的 getRequestDispatcher() 方法获取  RequestDispatcher 对象
		//调用 getRequestDispatcher() 需要传入要转发的地址
		String path = "testServlet";
		RequestDispatcher requestDispatcher = request.getRequestDispatcher("/" + path);

		//2. 调用 HttpServletRequest 的 forward(request, response) 进行请求的转发.
		requestDispatcher.forward(request, response);
	}

}
